package org.dromara.tearoom.domain.vo;


import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.tearoom.domain.TerOrder;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;


/**
 * 订单视图对象 ter_order
 *
 * @author xch
 * @date 2025-03-29
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = TerOrder.class)
public class TerOrderVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 订单id
     */
    @ExcelProperty(value = "订单id")
    private String id;

    /**
     * 开发平台Id
     */
    @ExcelProperty(value = "开发平台Id")
    private String openId;

    /**
     * 茶室名称
     */
    @ExcelProperty(value = "茶室名称")
    private String tearoomName;

    /**
     * 茶室id
     */
    @ExcelProperty(value = "茶室id")
    private Long tearoomId;

    /**
     * 茶室图片
     */
    private String teroomImgurl;

    @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "teroomImgurl")
    private String teroomImgurlUrl;

    /**
     * 入住开始日期时间
     */
    @ExcelProperty(value = "入住开始日期时间")
    private String startTime;

    /**
     * 入住结束日期时间
     */
    @ExcelProperty(value = "入住结束日期时间")
    private String endTime;

    /**
     * 预定时间(h)
     */
    @ExcelProperty(value = "预定时间(h)")
    private Float presetTime;

    /**
     * 订单状态（0-待支付 1-已确认 2-已入住 3-已完成 4-已取消）
     */
    @ExcelProperty(value = "订单状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=-待支付,1=-已确认,2=-已入住,3=-已完成,4=-已取消")
    private String orderStatus;

    /**
     * 订单总价 单位:分
     */
    @ExcelProperty(value = "订单总价")
    private Integer totalPrice;


    /**
     * 预付金额 单位:分
     */
    @ExcelProperty(value = "预付金额")
    private Integer prepayAmount;

    /**
     * 预计收入 单位:分
     */
    @ExcelProperty(value = "预计收入")
    private Integer revenue;

    /**
     * 入住人电话
     */
    @ExcelProperty(value = "入住人电话")
    private String mobile;

    /**
     * 优惠劵id
     */
    @ExcelProperty(value = "优惠劵id")
    private Long couponId;

    /**
     * 支付方式（微信/支付宝）
     */
    @ExcelProperty(value = "支付方式", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "微=信/支付宝")
    private String paymentMethod;

    /**
     * 秘钥类型
     */
    private String keyType;

    /**
     * 门锁密钥
     */
    @ExcelProperty(value = "门锁密钥")
    private String doorKey;


    private String keyId;

    private LocalDateTime createTime;

    private LocalDateTime viewStartTime;

    private LocalDateTime viewEndTime;

    /**
     * 房间状态
     */
    private String roomStatus;

    /**
     * 订阅消息
     */
    private TerUserSubscriptionVo subscription;


    /**
     * 用户的优惠劵列表（可用 + 不可用）
     */
    private List<Coupon> coupons;

    /**
     * 优惠劵减免金额（总），单位：分
     *
     */
    private Integer couponPrice;

    /**
     * 优惠劵减免时长，单位：小时
     *
     */
    private Double couponHour;

    private String isRenew;
    private String refundId;

    /**
     * 续订前订单ID
     */
    private String oldId;

    /**
     * 优惠劵信息
     */
    @Data
    public static class Coupon {

        /**
         * 优惠劵编号
         */
        private Long id;
        /**
         * 优惠劵名
         */
        private String name;

        /**
         * 是否设置满多少金额可用，单位：分
         */
        private Integer usePrice;

        /**
         * 生效开始时间
         */
        private LocalDateTime validStartTime;
        /**
         * 生效结束时间
         */
        private LocalDateTime validEndTime;

        /**
         * 优惠卷类型
         */
        private Integer type;

        /**
         * 优惠卷类型
         */
        private Integer plateType;

        /**
         * 优惠小时
         */
        private Double hourCount;

        /**
         * 折扣百分比
         */
        private Integer discountPercent;
        /**
         * 优惠金额，单位：分
         */
        private Integer discountPrice;
        /**
         * 折扣上限，单位：分
         */
        private Integer discountLimitPrice;

        /**
         * 是否匹配
         */
        private Boolean match;
        /**
         * 不匹配的原因
         */
        private String mismatchReason;

    }
}
